using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._LayersandTableViews
{
    /// <summary>
    /// <para>Make WCS Layer</para>
    /// <para>Creates a temporary raster layer from a WCS service.</para>
    /// <para>从 WCS 服务创建临时栅格图层。</para>
    /// </summary>    
    [DisplayName("Make WCS Layer")]
    public class MakeWCSLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MakeWCSLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_wcs_coverage">
        /// <para>Input WCS Coverage</para>
        /// <para><xdoc>
        ///   <para>Browse to the input WCS service. This tool can also accept a URL that references the WCS service.</para>
        ///   <para>If a WCS server URL is used, the URL should include the coverage name and version information. If only the URL is entered, the tool will automatically take the first coverage and use the default version (1.0.0) to create the WCS layer.</para>
        ///   <para>An example of a URL that includes the coverage name and version is http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?coverage=rasterDRGs&version=1.1.1.</para>
        ///   <para>In this example, http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer? is the URL. The coverage specified is coverage=rasterDRGs, and the version is &version=1.1.1.</para>
        ///   <para>To get the coverage names on a WCS server, use the WCS GetCapabilities request. An example of WCS request is http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?request=getcapabilities&service=wcs.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>浏览到输入的 WCS 服务。此工具还可以接受引用 WCS 服务的 URL。</para>
        ///   <para>如果使用 WCS 服务器 URL，则该 URL 应包含覆盖范围名称和版本信息。如果仅输入 URL，则该工具将自动获取第一个覆盖率并使用默认版本 （1.0.0） 创建 WCS 图层。</para>
        /// <para>http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?coverage=rasterDRGs&version=1.1.1 包含覆盖范围名称和版本的 URL 示例。</para>
        /// <para>在此示例中，http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer？ 是 URL。指定的覆盖率为 coverage=rasterDRGs，版本为 &version=1.1.1。</para>
        /// <para>若要获取 WCS 服务器上的覆盖率名称，请使用 WCS GetCapabilities 请求。WCS 请求的一个示例是 http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?request=getcapabilities&service=wcs。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_wcs_layer">
        /// <para>Output WCS Layer</para>
        /// <para>The name of the output WCS layer.</para>
        /// <para>输出 WCS 图层的名称。</para>
        /// </param>
        public MakeWCSLayer(object _in_wcs_coverage, object _out_wcs_layer)
        {
            this._in_wcs_coverage = _in_wcs_coverage;
            this._out_wcs_layer = _out_wcs_layer;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Make WCS Layer";

        public override string CallName => "management.MakeWCSLayer";

        public override List<string> AcceptEnvironments => ["extent", "geographicTransformations", "outputCoordinateSystem"];

        public override object[] ParameterInfo => [_in_wcs_coverage, _out_wcs_layer, _template, _band_index];

        /// <summary>
        /// <para>Input WCS Coverage</para>
        /// <para><xdoc>
        ///   <para>Browse to the input WCS service. This tool can also accept a URL that references the WCS service.</para>
        ///   <para>If a WCS server URL is used, the URL should include the coverage name and version information. If only the URL is entered, the tool will automatically take the first coverage and use the default version (1.0.0) to create the WCS layer.</para>
        ///   <para>An example of a URL that includes the coverage name and version is http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?coverage=rasterDRGs&version=1.1.1.</para>
        ///   <para>In this example, http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer? is the URL. The coverage specified is coverage=rasterDRGs, and the version is &version=1.1.1.</para>
        ///   <para>To get the coverage names on a WCS server, use the WCS GetCapabilities request. An example of WCS request is http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?request=getcapabilities&service=wcs.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>浏览到输入的 WCS 服务。此工具还可以接受引用 WCS 服务的 URL。</para>
        ///   <para>如果使用 WCS 服务器 URL，则该 URL 应包含覆盖范围名称和版本信息。如果仅输入 URL，则该工具将自动获取第一个覆盖率并使用默认版本 （1.0.0） 创建 WCS 图层。</para>
        /// <para>http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?coverage=rasterDRGs&version=1.1.1 包含覆盖范围名称和版本的 URL 示例。</para>
        /// <para>在此示例中，http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer？ 是 URL。指定的覆盖率为 coverage=rasterDRGs，版本为 &version=1.1.1。</para>
        /// <para>若要获取 WCS 服务器上的覆盖率名称，请使用 WCS GetCapabilities 请求。WCS 请求的一个示例是 http://ServerName/arcgis/services/serviceName/ImageServer/WCSServer?request=getcapabilities&service=wcs。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input WCS Coverage")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_wcs_coverage { get; set; }


        /// <summary>
        /// <para>Output WCS Layer</para>
        /// <para>The name of the output WCS layer.</para>
        /// <para>输出 WCS 图层的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output WCS Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_wcs_layer { get; set; }


        /// <summary>
        /// <para>Template Extent</para>
        /// <para><xdoc>
        ///   <para>The output extent of the WCS layer.</para>
        ///   <bulletList>
        ///     <bullet_item>Default—The extent will be based on the maximum extent of all participating inputs. This is the default.</bullet_item><para/>
        ///     <bullet_item>Current Display Extent—The extent is equal to the data frame or visible display. The option is not available when there is no active map.</bullet_item><para/>
        ///     <bullet_item>As Specified Below—The extent will be based on the minimum and maximum extent values specified.</bullet_item><para/>
        ///     <bullet_item>Browse—The extent will be based on an existing dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>WCS 图层的输出范围。</para>
        ///   <bulletList>
        ///     <bullet_item>默认值 - 范围将基于所有参与输入的最大范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>当前显示范围 - 范围等于数据框或可见显示。当没有活动地图时，该选项不可用。</bullet_item><para/>
        ///     <bullet_item>如下所述 - 范围将基于指定的最小和最大范围值。</bullet_item><para/>
        ///     <bullet_item>浏览 - 范围将基于现有数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Template Extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _template { get; set; } = null;


        /// <summary>
        /// <para>Bands</para>
        /// <para>Choose which bands to export for the layer. If no bands are specified, all the bands will be used in the output.</para>
        /// <para>选择要为图层导出的波段。如果未指定波段，则将在输出中使用所有波段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Bands")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _band_index { get; set; } = null;


        public MakeWCSLayer SetEnv(object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null)
        {
            base.SetEnv(extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem);
            return this;
        }

    }

}